#ifndef __INFORMACION_CARRERA_H__
#define __INFORMACION_CARRERA_H__

#include "InformacionMateriaSegunCarrera.h"

using namespace std;

namespace modelo {

	class InformacionCarrera 
	{
	
	public:
		InformacionCarrera(string nombreCarrera);
		~InformacionCarrera(void);

		bool HayRestriccionesDeCreditosParaOptativas();
		bool HayRestriccionesDeCantidadParaOptativas();
		bool OptativasCompletas(int cantCreditosOptativas, int cantMateriasOptativas);

		/** Accesibilidad */
		string GetNombre() {return nombre;}
		int GetCreditosMateriasObligatorias() {return creditosMateriasObligatorias;}
		int GetCreditosMateriasOptativas() {return creditosMateriasOptativas;}
		int GetCantidadMateriasOptativasMinimas() {return cantidadMateriasOptativasMinimas;}
		list<InformacionMateriaSegunCarrera*> GetCondicionesMateriasObligatorias() {return condicionesMateriasObligatorias;}
		list<InformacionMateriaSegunCarrera*> GetCondicionesMateriasOptativas() {return condicionesMateriasOptativas;}

		void SetNombre(string otroNombre) {nombre = otroNombre;}
		void SetCreditosMateriasObligatorias(int creditos) {creditosMateriasObligatorias = creditos;}
		void SetCreditosMateriasOptativas(int creditos) {creditosMateriasOptativas = creditos;}
		void SetCantidadMateriasOptativasMinimas(int cant) {cantidadMateriasOptativasMinimas = cant;}
		void SetCondicionesMateriasObligatorias(list<InformacionMateriaSegunCarrera*> condiciones) {condicionesMateriasObligatorias = condiciones;}
		void SetCondicionesMateriasOptativas(list<InformacionMateriaSegunCarrera*> condiciones) {condicionesMateriasOptativas = condiciones;}
	
	private:
		string nombre;
		int creditosMateriasObligatorias, creditosMateriasOptativas;
		int cantidadMateriasOptativasMinimas;
		list<InformacionMateriaSegunCarrera*> condicionesMateriasObligatorias, condicionesMateriasOptativas;
	};
}

#endif